针对API接口渗透测试时要注意什么
针对API接口渗透测试时要注意以下方面:
尽可能的先获取API规范描述文件,如在线接口文档、api-docs.json文件、Swagger文件,RAML文件,API-Blueprint文件等,通过文件来获取API端点和详细调用方式及参数定义。
在无界面的情况下,除了API规范描述文件,通过Proxy代理方式,对流量进行分析也是获取API详情的一种手段。
关注可攻击的点,比如请求参数、请求方法GET/POST/PUT/DELETE、是否存在授权绕过(令牌是否正确验证,是否令牌有时效性)、是否存在注入点(MySQL、NoSQL)、是否存在批量分配的问题等。
关注通用的安全问题,比如是否存在Key泄露、是否存在暴力破解的可能、同一API多个版本不一致问题、XSS、CSRF等。
面向不同层次会话的攻击,比如传输层是否使用SSL或使用可信的数字证书、应用层会话是否设置超时或采取限流熔断机制等。
加强API接口安全的机制有以下这些:
数据加密机制:必须对数据加密,常见的做法对关键字段加密比如用户密码直接通过md5加密,现在主流的做法是使用https协议 ,在http和tcp之间添加一层加密层(SSL层),这一层负责数据的加密和解密。
数据加签机制:数据加签 就是由发送者产生一段无法伪造的一段数字串,来保证数据在传输过程中不被篡改。数据在传输过程中经过加密,理论上就算被抓包,也无法对数据进行篡改,但是我们要知道加密的部分其实只是在外网,现在很多服务在内网中都需要经过很多服务跳转,所以这里的加签可以防止内网中数据被篡改。
时间戳机制:但是有不法者不关心真实的数据,而是直接拿到抓取的数据包进行恶意请求。这时候可以使用时间戳机制,在每次请求中加入当前的时间,服务器端会拿到当前时间和消息中的时间相减,看看是否在一个固定的时间范围内比如5分钟内。这样恶意请求的数据包是无法更改里面时间的,所以5分钟后就视为非法请求了。
AppId机制:大部分网站基本都需要用户名和密码才能登录,并不是谁来能使用我的网站,这其实也是一种安全机制。对应的对外提供的接口其实也需要这么一种机制,并不是谁都可以调用,需要使用接口的用户需要在后台开通appid,提供给用户相关的密钥。在调用的接口中需要提供 appid+密钥,服务器端会进行相关的验证。
限流机制:本来就是真实的用户,并且开通了appid,但是出现频繁调用接口的情况。这种情况需要给相关appid限流处理,常用的限流算法有令牌桶和漏桶算法。
黑名单机制:如果此appid进行过很多非法操作,或者说专门有一个中黑系统,经过分析之后直接将此appid列入黑名单,所有请求直接返回错误码。
数据合法性校验机制:这个可以说是每个系统都会有的处理机制,只有在数据是合法的情况下才会进行数据处理。每个系统都有自己的验证规则,当然也可能有一些常规性的规则,比如身份证长度和组成,电话号码长度和组成等等。